<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>高阶函数_函数柯里化</title>
</head>
<body>
<div id="container">

</div>
</body>
</html>


<!--引入react核心库-->
<script type="text/javascript" src="../Js/react.development.js"></script>
<!--引入react-dom库,用于支持react操作dom-->
<script type="text/javascript" src="../Js/react-dom.development.js"></script>
<!--引入babel库,用于将jsx转成js-->
<script type="text/javascript" src="../Js/babel.min.js"></script>
<!--引入prop-types库,用于将对props进行类型限制-->
<script type="text/javascript" src="../Js/prop-types.js"></script>

<script type="text/babel">//此处一定要写text/babel，将jsx转成js

class Demo extends React.Component {

    state = {
        account: '',
        password: ''
    }

    showData = (e) => {
        e.preventDefault()//阻止表单提交

        const {account, password} = this.state
        alert(`账号:${account},密码:${password}`)
    }
    /*
    高阶函数:如果一个函数符合下面2个规范中的任何一个，那该函数就是高阶函数。
     1.若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
     2.若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。

      常见的高阶所数有:Promise、setTimeout、arr.map()等等

    函数的柯里化:通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式。
    */
    saveFormData = (dataType) => {
        return (e) => {
            this.setState({
                [dataType]: e.target.value
            })
        }
    }


    render() {
        return (
            <div>
                <form action="https://www.baidu.com/">
                    <label>账号</label><input type="text" onChange={this.saveFormData("account")}/>
                    <label>密码</label> <input type="password" onChange={this.saveFormData("password")}/>
                    <button onClick={this.showData}>登录</button>
                </form>
            </div>
        )
    }
}

ReactDOM.render(<Demo/>, document.getElementById("container"))

</script>